#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
数据集分析演示
演示多输出回归数据的具体内容和结构
"""
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
import pandas as pd

print("="*60)
print("多输出回归数据集详细分析")
print("="*60)

# 1. 生成数据集（与原代码相同）
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=3, random_state=42)

print("\n📊 数据集基本信息：")
print(f"特征矩阵 X 的形状: {X.shape}")
print(f"目标矩阵 y 的形状: {y.shape}")
print(f"数据类型: {X.dtype}")

# 2. 查看前5个样本的特征数据
print("\n🔍 前5个样本的特征数据 (X):")
feature_names = [f'特征{i+1}' for i in range(10)]
df_features = pd.DataFrame(X[:5], columns=feature_names)
print(df_features.round(3))

# 3. 查看前5个样本的目标数据
print("\n🎯 前5个样本的目标数据 (y):")
target_names = ['目标1', '目标2', '目标3']
df_targets = pd.DataFrame(y[:5], columns=target_names)
print(df_targets.round(3))

# 4. 数据统计信息
print("\n📈 特征数据统计:")
print(f"最小值: {X.min():.3f}")
print(f"最大值: {X.max():.3f}")
print(f"均值: {X.mean():.3f}")
print(f"标准差: {X.std():.3f}")

print("\n📈 目标数据统计:")
for i, target in enumerate(target_names):
    print(f"{target}:")
    print(f"  范围: [{y[:, i].min():.3f}, {y[:, i].max():.3f}]")
    print(f"  均值: {y[:, i].mean():.3f}")
    print(f"  标准差: {y[:, i].std():.3f}")

# 5. 目标变量之间的相关性
print("\n🔗 目标变量相关性矩阵:")
correlation_matrix = np.corrcoef(y.T)
df_corr = pd.DataFrame(correlation_matrix, columns=target_names, index=target_names)
print(df_corr.round(3))

# 6. 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)

print("\n✂️ 数据分割结果:")
print(f"训练集特征: {X_train.shape}")
print(f"训练集目标: {y_train.shape}")
print(f"测试集特征: {X_test.shape}")
print(f"测试集目标: {y_test.shape}")

print("\n💡 数据解释:")
print("- 这是人工生成的合成数据，不是真实世界的数据")
print("- 10个特征中，只有前5个对目标有实际影响")
print("- 后5个特征是噪声，用来测试算法的特征选择能力")
print("- 3个目标变量可能存在相关性，需要同时预测")